# 抖码算法，让算法学习变得简单有趣
# 作者：老汤

"""
    题目 1：数组拼接

    题目描述：
    现在有多组整数数组，需要将他们合并成一个新的数组，合并规则：
    从每个数组里按顺序取出固定长度的内容，合并到新的数组，取完的内容会删除；
    如果该行不足固定长度，或者已经为空，则直接取出剩余部分的内容放到新的数组中，继续下一行。

    输入描述：
    第一行表示每次读取的固定长度，0 < 长度 < 10
    第二行是整数数组的数目，0 < 数目 < 10000
    第 3~n 行是徐亚奥合并的数组，不同的数组用换行分割，元素之间用逗号分割，最大不超过 100 个元素

    输出描述：
    输出一个新的数组，用逗号隔开

    示例 1
    输入：
    3
    2
    2,5,6,7,9,5,7
    1,7,4,3,4

    输出：
    2,5,6,1,7,4,7,9,5,3,4,7

    说明：获得长度 3 和数组数目 2，先遍历第一行，获得 2,5,6 ，
    再遍历第二行，获得 1,7,4。再循环回到第一行获得 7,9,5，
    再遍历第二行获得 3,4，再回到第一行获得 7
"""

fixed_len = int(input())
rows = int(input())

data = []
for i in range(rows):
    data.append(str(input()).split(","))

res, remain_rows = [], rows
# 用于记住每一行遍历到的位置
flags = [0] * rows

while remain_rows > 0:
    for row in range(rows):
        if flags[row] == -1:
            continue

        # 情况一：当前行剩余的元素个数不足 fixed_len
        if flags[row] + fixed_len >= len(data[row]):
            for i in range(flags[row], len(data[row])):
                res.append(data[row][i])
            remain_rows -= 1
            flags[row] = -1
        else:  # 情况二：当前行剩余的元素个数大于 fixed_len
            for i in range(flags[row], flags[row] + fixed_len):
                res.append(data[row][i])
            flags[row] += fixed_len

print(",".join(res))